#include <iostream>
#include <stack>
#include <vector>
#include <unordered_map>
using namespace std;

//int ret = 0;
//
//bool Moslems(string str3, stack<char> st, int n3)
//{
//    int i = 0;
//    while (str3[i])
//    {
//        if (str3[i] == st.top())
//        {
//            st.pop();
//        }
//        else
//        {
//            return false;
//        }
//        i++;
//    }
//    return true;
//}
//
//
//void Return_rin(string str1, string str2, string str3, stack<char> st, int n1, int n2, int i1, int i2)
//{
//    if (n1 == i1 && n2 == i2)
//    {
//        if (Moslems(str3, st, n1 + n2))
//        {
//            ret++;
//            return;
//        }
//    }
//    if (n1 > i1)
//    {
//        st.push(str1[i1]);
//        Return_rin(str1, str2, str3 += str1[i1], st, n1, n2, i1 + 1, i2);
//        st.pop();
//    }
//    if (n2 > i2)
//    {
//        st.push(str2[i2]);
//        Return_rin(str1, str2, str3 += str2[i2], st, n1, n2, i1, i2 + 1);
//        st.pop();
//    }
//}
//
//int main() {
//    string str1;
//    string str2;
//    cin >> str1 >> str2;
//    int n1 = str1.size();
//    int n2 = str2.size();
//    stack<char> st;
//    string str3;
//    Return_rin(str1, str2, str3, st, n1, n2, 0, 0);
//    cout << ret << endl;
//    return 0;
//}

//int ret = -1;
//
//bool Moslems(string str3, stack<char> st, int n3)
//{
//    int i = 0;
//    while (i < n3)
//    {
//        if (str3[i] == st.top())
//        {
//            st.pop();
//        }
//        else
//        {
//            return false;
//        }
//        i++;
//    }
//    return true;
//}
//
//
//void Return_rin(string str1, string str2, string str3, stack<char> st, int n1, int n2, int i1, int k)
//{
//    if (i1 == n1 && k != 0)
//    {
//        if (Moslems(str3, st, n1 + n2))
//        {
//            ret = k;
//            return;
//        }
//    }
//    if (i1 < n1)
//    {
//        st.push(str1[i1]);
//        Return_rin(str1, str2, str3 += str1[i1], st, n1, n2, i1 + 1, 0);
//        st.pop();
//    }
//    if (k == 0)
//    {
//        for (auto s : str2)
//        {
//            st.push(s);
//        }
//        k = i1;
//        Return_rin(str1, str2, str3 += str2, st, n1, n2, i1, k);
//    }
//}
//
//int main() {
//    string str1;
//    string str2;
//    cin >> str1 >> str2;
//    int n1 = str1.size();
//    int n2 = str2.size();
//    stack<char> st;
//    string str3;
//    Return_rin(str1, str2, str3, st, n1, n2, 0, 0);
//    cout << ret << endl;
//    return 0;
//}

int main() {
    int n;
    while(cin>>n)
    {
        int k=n;
        vector<int> ret;
        while(k--)
        {
            int p;
            cin>>p;
            ret.push_back(p);
        }
        unordered_map<int, long long> hash;
        long long sum=0;
        k=0;
        for(int i=0;i<n;i++)
        {
            if(ret[i]<0)
            {
                k++;
            }
            sum+=ret[i];
            hash[i]=sum;
        }
        int left=0;
        int right=n-1;
        long long my_max=sum;
        if(k==n)
        {
            my_max=0;
        }
        else
        {
            for(int x=0;x<n;x++)
            {
                for(int y=0;y<=x;y++)
                {
                    if(my_max<hash[x]-hash[y]+ret[y])
                    {
                        left=y;
                        right=x;
                        my_max=hash[x]-hash[y]+ret[y];
                    }
                }
            }
        }
        cout<<my_max<<" "<<ret[left]<<" "<<ret[right]<<endl;

    }
    return 0;
}

int main() {
    int n;
    while (cin >> n)
    {
        int k = n;
        vector<int> ret;
        while (k--)
        {
            int p;
            cin >> p;
            ret.push_back(p);
        }
        unordered_map<int, long long> hash;
        long long sum = 0;
        k = 0;
        for (int i = 0; i < n; i++)
        {
            if (ret[i] < 0)
            {
                k++;
            }
            sum += ret[i];
            hash[i] = sum;
        }
        int left = 0;
        int right = n - 1;
        long long my_max = sum;
        if (k == n)
        {
            my_max = 0;
        }
        else
        {
            for (int x = 0; x < n; x++)
            {
                for (int y = 0; y <= x; y++)
                {
                    if (my_max < hash[x] - hash[y] + ret[y])
                    {
                        left = y;
                        right = x;
                        my_max = hash[x] - hash[y] + ret[y];
                    }
                }
            }
        }
        cout << my_max << " " << ret[left] << " " << ret[right] << endl;

    }
    return 0;
}